// 观察者模式 观察者模式，被观察者模式
// 将所有的观察者都放到被观察者中（基于发布订阅）

// 被观察者
class Subject {
  constructor(name) {
    this.name = name;
    this.obsersers = [];
    this.state = '';
  }

  attach(o) {
    // 被观察者中要存放所有的观察者
    this.obsersers.push(o);
  }

  setState(newState) {
    if (this.state != newState) {
      this.state = newState;
      this.obsersers.forEach((o) => o.update(this));
    }
  }
}

// 观察者

class Obserser {
  constructor(name) {
    this.name = name;
  }
  update(baby) {
    console.log(baby.name + '跟' + this.name + '说' + baby.state);
  }
}

let baby = new Subject('小宝宝');
let o1 = new Obserser('爸爸');
let o2 = new Obserser('妈妈');

baby.attach(o1);
baby.attach(o2);

baby.setState('我不开心了');
